bitkeeper revision 1.1159.187.26 (41a8c480rckpADNC0Lh2VZmtPTNKeg)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Sat, 27 Nov 2004 18:16:32 +0000 (18:16 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Sat, 27 Nov 2004 18:16:32 +0000 (18:16 +0000)
We must load shared_info into %esi at every external entry point into
entry.S (i.e., every label marked ENTRY()). I was missing at least
resume_userspace which is essential for vm86.

linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S

index 281e06ebc184c46363d4cefad669810d1b6e4759..d530d32150f9cdbb2afb7a742ed71a0f19209073 100644 (file)
@@ -194,6 +194,7 @@ ENTRY(ret_from_fork)
        call schedule_tail
        GET_THREAD_INFO(%ebp)
        popl %eax
+       movl HYPERVISOR_shared_info, %esi
        jmp syscall_exit
 
 /*
@@ -214,6 +215,7 @@ ret_from_intr:
        testl $(VM_MASK | 2), %eax
        jz resume_kernel                # returning to kernel or vm86-space
 ENTRY(resume_userspace)
+       movl HYPERVISOR_shared_info, %esi
        XEN_BLOCK_EVENTS(%esi)          # make sure we don't miss an interrupt
                                        # setting need_resched or sigpending
                                        # between sampling and the iret
@@ -225,6 +227,7 @@ ENTRY(resume_userspace)
 
 #ifdef CONFIG_PREEMPT
 ENTRY(resume_kernel)
+       movl HYPERVISOR_shared_info, %esi
        cmpl $0,TI_preempt_count(%ebp)  # non-zero preempt_count ?
        jnz restore_all
 need_resched: